<?php
class PartidosUser extends AppModel {

	var $name = 'PartidosUser';

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $belongsTo = array(
			'Partido' => array('className' => 'Partido',
								'foreignKey' => 'partido_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			),
			'User' => array('className' => 'User',
								'foreignKey' => 'user_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			)
	);

/**/
	function obtenerUsuariosTodos($salaId){
		//obtener todos los partidos activos en una sala	
		$partidos=$this->Partido->find('all', array('conditions'=>array('Partido.estado <'=> 10, 'Partido.sala_id'=>$salaId)));
		$listausers=array();
		foreach ($partidos as $partido){
			//obtener todos los PartidosUsers del partido
			$listausers[$partido['Partido']['partido']]=$this->find('all', array('conditions'=>array('PartidosUser.partido_id'=>$partido['Partido']['partido'])));
		}
		//print_r($listausers);
		return $listausers;
	}


	/*Sale del partido.. llamada desde partidos_controller funcion salir(). Si dicho usuario no es duenho del partido
se busca en la tabla Partidos_users
RETORNA:
0 si no esta en el partido
1 si salio del partido
2 si hubo un error y no pudo salir
*/	
	function salirPartido($partidoId, $userId){
		$userPartido=$this->find('first', array('conditions'=>array('PartidosUser.partido_id =' => $partidoId, 'PartidosUser.user_id =' => $userId)));
		//print_r($userPartido);
		if(!$userPartido){
			return 0;
		}else{
			if ($this->del($userPartido['PartidosUser']['id'])) {
				//elimina la cantidad de usuarios en partido mediante triggers y esto ocasiona que cambie el estado
				//coloca estado a Disponible
				//$this->id = $partido['Partido']['partido'];
				//$this->saveField('estado',1);//Partido disponible
				return 1;
			}else{
				return 2;
			}
		}
	}
	
	function cantJugadoresEnPartido($userId,$partidoId){
		//se obtiene los datos del partido
		$partido=$this->Partido->find('first', array('conditions'=>array('Partido.estado <'=> 10, 'Partido.partido'=>$partidoId)));
		$userPartido=$this->find('first', array('conditions'=>array('PartidosUser.partido_id =' => $partidoId, 'PartidosUser.user_id =' => $userId)));
		if($userPartido['PartidosUser']['localvisitante']==1){ //si el usuario es local
			$equipo=ClassRegistry::init('Equipo')->findByEquipo($partido['Partido']['equipolocal_id']);
		}elseif($userPartido['PartidosUser']['localvisitante']==2){ //si es visitante
			$equipo=ClassRegistry::init('Equipo')->findByEquipo($partido['Partido']['equipovisitante_id']);
		}else{
			return -1; //no hay equipo
		}
		if($equipo['Equipo']['user_id']==$userId && $userPartido['PartidosUser']['localvisitante']==1){ //si el usuario es duenho del equipo local
			$cantJugadores=$this->find('count', array('conditions'=>array('PartidosUser.partido_id =' => $partidoId,'PartidosUser.localvisitante =' => 1)));
		}elseif($equipo['Equipo']['user_id']==$userId && $userPartido['PartidosUser']['localvisitante']==2){//duenho y equipo visitante
			$cantJugadores=$this->find('count', array('conditions'=>array('PartidosUser.partido_id =' => $partidoId, 'PartidosUser.localvisitante =' => 2)));
		}else{
			return -2; //no es duenho del equipo
		}
		return $cantJugadores;
	}
	
	function jugadoresAunNoInvitados($equipoId, $userId, $partidoId){
		$usersEquipo=$this->User->find('all', array('fields'=>array('User.username'),'conditions'=>array('User.equipo_id'=>$equipoId, 'User.user !='=>$userId)));
		$players=array();
		foreach($usersEquipo as $user){
			$partidoUser=$this->find('first',array('conditions'=>array('PartidosUser.partido_id'=>$partidoId, 'PartidosUser.user_id'=>$user['User']['user'])));
			if(!$partidoUser){
				$players[$user['User']['user']]=$user['User']['username'];
			}
		}
		return $players;
	}
	
	function jugadoresInvitados($equipoId, $userId, $partidoId){
		$usersEquipo=$this->User->find('all', array('fields'=>array('User.username'),'conditions'=>array('User.equipo_id'=>$equipoId)));
		$players=array();
		foreach($usersEquipo as $user){
			$partidoUser=$this->find('first',array('conditions'=>array('PartidosUser.partido_id'=>$partidoId, 'PartidosUser.user_id'=>$user['User']['user'])));
			if($partidoUser){
				$players[$user['User']['user']]=$user['User']['username'];
			}
		}
		return $players;
	}
	
/*Funcion llamada al hacer logout.. se eliminan los partidos activos.. Si ya empezo, el usuario que salio pierde.. O su equipo pierde
 si es en una sala comun, puede salir del partido sin perder..
*/	
	function terminarPartidosActivos($userId){
		$partidosUser=$this->find('all',array('conditions'=>array('PartidosUser.user_id'=>$userId, 'PartidosUser.estado <'=> 10)));
		
		foreach ($partidosUser as $partidoUser){
			if($partidoUser['Partido']['estado']>3 && $partidoUser['Partido']['estado']<10){//partido en juego
				$miJugada = ClassRegistry::init('Jugada')->miJugada($partidoUser['Partido']['partido']);
				$miPartido = ClassRegistry::init('Partido')->datosPartido($partidoUser['Partido']['partido']);
				$relato=unserialize($miJugada['Jugada']['relato']);
				$indice=count($relato);
				if($partidoUser['PartidosUser']['localvisitante']==1){//si es local
					//controlo si el partido es equipo vs equipo para mejorar el relato
					$nombreJugador=ClassRegistry::init('User')->nombreUser($partidoUser['Partido']['user_visitante']);
					if($miPartido['Partido']['torneo_id']>0){
						//print_r($partidoUser['Partido']['equipovisitante_id']);
						
						$misDatosEquipo = ClassRegistry::init('Equipo')->misDatosEquipo($partidoUser['Partido']['equipovisitante_id']);
						//print_r($misDatosEquipo['Equipo']['nombre']);
						$relato[$indice]=array("FIN DE JUEGO por abandono!"," *GANO Equipo: ".$misDatosEquipo['Equipo']['nombre']," *Capitan: ".$nombreJugador[0]['User']['username'],null);
					}else{
						$relato[$indice]=array("FIN DE JUEGO por abandono!"," *GANO: ".$nombreJugador[0]['User']['username'],null,null);
					}
					$this->Partido->id = $partidoUser['Partido']['partido'];
					$this->Partido->saveField('goleslocal',0); //local pierde porque salio
					$this->Partido->saveField('golesvisitante',2);
				}else{
					//controlo si el partido es equipo vs equipo para mejorar el relato
					$nombreJugador=ClassRegistry::init('User')->nombreUser($partidoUser['Partido']['user_id']);
					if($miPartido['Partido']['torneo_id']>0){
						//print_r($partidoUser['Partido']['equipolocal_id']);
						$misDatosEquipo = ClassRegistry::init('Equipo')->misDatosEquipo($partidoUser['Partido']['equipolocal_id']);
						//print_r($misDatosEquipo['Equipo']['nombre']);
						$relato[$indice]=array("FIN DE JUEGO por abandono!"," *GANO Equipo: ".$misDatosEquipo['Equipo']['nombre']," *Capitan: ".$nombreJugador[0]['User']['username'],null);
					}else{
						$relato[$indice]=array("FIN DE JUEGO por abandono!"," *GANO: ".$nombreJugador[0]['User']['username'],null,null);
					}

					$this->Partido->id = $partidoUser['Partido']['partido'];
					$this->Partido->saveField('goleslocal',2); //local gana
					$this->Partido->saveField('golesvisitante',0);
				}
				ClassRegistry::init('Jugada')->id = $partidoUser['Partido']['partido'];
                                ClassRegistry::init('Jugada')->saveField('relato',serialize($relato));
				
				$this->Partido->id = $partidoUser['Partido']['partido'];
				$this->Partido->saveField('estado',11);//Partido finalizo xq el usuario salio
				//$this->Session->setFlash(__('Ha salido del partido. El Oponente gano.', true));
			}elseif($partidoUser['Partido']['sala_id']>0){ //si es un partido de sala, el usuario puede salir del partido
				if($partidoUser['Partido']['estado']<4){ // si aun no empezo el partido
					if($userId==$partidoUser['Partido']['user_id']){ // si el usuario que salio es el que creo
						$this->Partido->del($partidoUser['Partido']['partido']); //se borra el partido
					}else{ //si no lo creo se buscan los otros usuarios en el partido asociado
						$userPartido=$this->salirPartido($partidoUser['Partido']['partido'],$userId);
						
					}
				}
			}
		}
	}
	
}
?>
